package com.etone.smartAudit.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.etone.smartAudit.enums.IapDataField;
import com.etone.smartAudit.enums.StateType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

/**
 * @author: 蒋学伟
 * @create: 2020-06-23 10:37:53
 * @Description 服务器信息
 */
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@TableName(value = "f_server_info", autoResultMap = true)
public class ServerInfo implements Serializable {

    @TableId(type = IdType.AUTO, value = "intId")
    private Integer id;

    /**
     * 服务器ip
     */
    @TableField("vcIp")
    private String ip;

    /**
     * 服务器名称
     */
    @TableField("vcName")
    private String name;

    /**
     * 设备名称
     */
    @TableField("vcDeviceName")
    private String deviceName;

    /**
     * 操作系统
     */
    @TableField("vcOperationSystem")
    private String operationSystem;

    /**
     * 管理员
     */
    @TableField("vcManager")
    private String manager;

    /**
     * 审计负责人
     */
    @TableField("vcAuditCharge")
    private String auditCharge;

    /**
     * 运维人员
     */
    @TableField("vcOperation")
    private String operation;

    /**
     * cpu信息
     */
    @TableField("vcCPUInfo")
    private String cpuInfo;

    /**
     * 所属数据域(O/B/M)。O域，B域，M域，OTHER：其他
     */
    @TableField("vcField")
    private IapDataField field;

    /**
     * cpu个数
     */
    @TableField("intCPUCnt")
    private Integer cpuCnt;

    /**
     * cpu使用率
     */
    @TableField("douCPUUsedRate")
    private Double cpuUsedRate;

    /**
     * 内存大小(G)
     */
    @TableField("douMemory")
    private Double memory;

    /**
     * 已使用内存大小(G)
     */
    @TableField("douMemoryUsed")
    private Double memoryUsed;

    /**
     * 服务器类型
     */
    @TableField("vcType")
    private String type;

    /**
     * 硬盘总大小(G)
     */
    @TableField("douSpace")
    private Double space;

    /**
     * 已使用硬盘总大小(G)
     */
    @TableField("douSpaceUsed")
    private Double spaceUsed;

    /**
     * 有效性
     */
    @TableField("vcState")
    private StateType state;

    /**
     * es最后收集时间
     */
    @TableField("dtEsLastCollectTime")
    private Date esLastCollectTime;

    /**
     * es查询指标信息
     */
    @TableField(value = "vcEsInfo", typeHandler = JacksonTypeHandler.class)
    private EsInfo esInfo;

    /**
     * 服务器所在位置
     */
    @TableField("vcPlace")
    private String place;

    /**
     * 用途
     */
    @TableField("vcPurpose")
    private String purpose;

    /**
     * 安装说明
     */
    @TableField("vcInstallRemark")
    private String installRemark;

    /**
     * 获取服务器是否是异常
     *
     * @return
     */
    public Boolean isException() {
        if (space == null || space == 0) {
            return true;
        }
        return (spaceUsed == null ? 0 : spaceUsed) / space > 0.8;
    }

}
